0

我正在尝试从默认活动调用活动,但是当触发调用活动时,我的应用程序崩溃并关闭并显示此消息。这07-06 11:54:59.291: E/MapActivity(366): Couldn't get connection factory client是我当前调用活动的代码

public class GMapsActivity extends MapActivity {
EditText password;
Button   login;
MapView mapView;


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initcontrols();
}
public void initcontrols()
{
    password=(EditText)findViewById(R.id.pass);
    login=(Button)findViewById(R.id.login);
    mapView=(MapView)findViewById(R.id.map_view);
    login.setOnClickListener(new Button.OnClickListener(){
        public void onClick(View v)
        {
             Intent myIntent = null;
             if(password.getText().toString().equals("admin")) {
             System.out.println("Entering");
             mapView.setVisibility(View.VISIBLE);
             login.setVisibility(View.INVISIBLE);
             password.setVisibility(View.INVISIBLE);
             myIntent = new Intent(v.getContext(), GMapsActivity1.class);

            } else {
            }
             startActivity(myIntent);
        }

    });

}



@Override
protected boolean isRouteDisplayed() {
    // TODO Auto-generated method stub
    return false;
}


}

请任何人帮助我做到这一点

更新 这是我的第二个活动代码请检查是否需要任何更改

public class GMapsActivity1 extends MapActivity {

private MapView mapView;
EditText password;
Button   login;

JSONArray jArray;
String result = null;
InputStream is = null;
StringBuilder sb=null;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);


mapView = (MapView) findViewById(R.id.map_view);       
        mapView.setBuiltInZoomControls(true);

 ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
//http post
try{
     HttpClient httpclient = new DefaultHttpClient();
     HttpPost httppost = new HttpPost("http://sml.com.pk/a/map.php");
     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
     HttpResponse response = httpclient.execute(httppost);
     HttpEntity entity = response.getEntity();
     is = entity.getContent();
     }catch(Exception e){
         Log.e("log_tag", "Error in http connection"+e.toString());
    }
//convert response to string
try{
      BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
       sb = new StringBuilder();
       sb.append(reader.readLine() + "\n");

       String line="0";
       while ((line = reader.readLine()) != null) {
                      sb.append(line + "\n");
        }
        is.close();
        result=sb.toString();
        }catch(Exception e){
              Log.e("log_tag", "Error converting result "+e.toString());
        }
//paring data
double LAT;
double LANG;
String INFO;
try{
      jArray = new JSONArray(result);
      JSONObject json_data=null;
      for(int i=0;i<jArray.length();i++){
             json_data = jArray.getJSONObject(i);
             LAT=json_data.getDouble("lat");
             LANG=json_data.getDouble("lang");
             INFO=json_data.getString("info");


//Overlay code
List<Overlay> mapOverlays = mapView.getOverlays();
                Drawable drawable = this.getResources().getDrawable(R.drawable.icon);
        CustomItemizedOverlay itemizedOverlay = new CustomItemizedOverlay(drawable, this);

        //GeoPoint point = new GeoPoint(latitudeE6, longitudeE6);
        GeoPoint point = new GeoPoint((int)(LAT * 1e6),(int)(LANG * 1e6));
        OverlayItem overlayitem = new OverlayItem(point, "Shakarganj", INFO);
        itemizedOverlay.addOverlay(overlayitem);
        mapOverlays.add(itemizedOverlay);

        MapController mapController = mapView.getController();

        mapController.animateTo(point);
        mapController.setZoom(6);

//Overlay code

         }
      }
      catch(JSONException e1){
          Toast.makeText(getBaseContext(), "No Vehicles Found" ,Toast.LENGTH_LONG).show();
      } catch (ParseException e1) {
            e1.printStackTrace();
    }
}
@Override
protected boolean isRouteDisplayed() {
    return false;
}
}

这是我的清单文件代码

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.javacodegeeks.android.googlemaps"
      android:versionCode="1"
      android:versionName="1.0">
      <uses-sdk android:minSdkVersion="10"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

    <application android:icon="@drawable/icon" android:label="@string/app_name">

        <activity android:name=".GMapsActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="GMapsActivity1"
           android:launchMode="singleTop">
            <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />

        </activity>

        <uses-library android:name="com.google.android.maps" />


    </application>    

</manifest> 

更新1

package com.javacodegeeks.android.googlemaps;

import java.util.ArrayList;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.widget.Toast;

import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.OverlayItem;

public class CustomItemizedOverlay extends ItemizedOverlay<OverlayItem> {

    private ArrayList<OverlayItem> mapOverlays = new ArrayList<OverlayItem>();

    private Context context;

    public CustomItemizedOverlay(Drawable defaultMarker) {
          super(boundCenterBottom(defaultMarker));
    }

    public CustomItemizedOverlay(Drawable defaultMarker, Context context) {
          this(defaultMarker);
          this.context = context;
    }

    @Override
    protected OverlayItem createItem(int i) {
        return mapOverlays.get(i);
    }

    @Override
    public int size() {
        return mapOverlays.size();
    }

    @Override
    protected boolean onTap(int index) {
        OverlayItem item = mapOverlays.get(index);
        //AlertDialog.Builder dialog = new AlertDialog.Builder(context);
        //dialog.setTitle(item.getTitle());
        //dialog.setMessage(item.getSnippet());
        //dialog.show();
        //Toast.makeText(context, item.getSnippet(), 20);
        Toast.makeText(context, item.getSnippet(),  Toast.LENGTH_LONG).show();
        return true;
    }

    public void addOverlay(OverlayItem overlay) {
        mapOverlays.add(overlay);
        this.populate();
    }

}
4

8 回答 8

1

试试下面的代码:

    public class GMapsActivity extends MapActivity {
    EditText password;
    Button   login;
    MapView mapView;


    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

        password=(EditText)findViewById(R.id.pass);
        login=(Button)findViewById(R.id.login);
        mapView=(MapView)findViewById(R.id.map_view);


        login.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v)
            {
                 Intent myIntent = null;
                 if(password.getText().toString().equals("admin")) {
                 System.out.println("Entering");
                 mapView.setVisibility(View.VISIBLE);
                 login.setVisibility(View.INVISIBLE);
                 password.setVisibility(View.INVISIBLE);
                 myIntent = new Intent(GMapsActivity.this, GMapsActivity1.class);
                 startActivity(myIntent);
                } 

            }

        });

    }



    @Override
    protected boolean isRouteDisplayed() {
        // TODO Auto-generated method stub
        return false;
    }


    }

更新

你为什么用这个:

<activity android:name="GMapsActivity1"
          android:launchMode="singleTop">
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />

</activity>

像这样使用:

<activity
            android:name=".GMapsActivity1" 
            android:launchMode="singleTop" >
</activity>
于 2012-07-06T07:12:28.270 回答
0

确保您创建的是myIntent正确的并且它不为空(在else中您没有做任何事情......)

还要更改创建:

myIntent = new Intent(GMapsActivity.this, GMapsActivity1.class);
于 2012-07-06T06:54:14.233 回答
0
 if(password.getText().toString().equals("admin")) {
             System.out.println("Entering");
             mapView.setVisibility(View.VISIBLE);
             login.setVisibility(View.INVISIBLE);
             password.setVisibility(View.INVISIBLE);
             myIntent = new Intent(v.getContext(), GMapsActivity1.class);

            } else {
            }
             startActivity(myIntent);

上面的代码说 myIntent 仅在密码为 admin 而不是其他情况下才被初始化..但它甚至没有被初始化来启动活动..

于 2012-07-06T06:54:26.603 回答
0

试试这个代码。

Intent myIntent = null;
if(password.getText().toString().equals("admin")) {
System.out.println("Entering");
mapView.setVisibility(View.VISIBLE);
login.setVisibility(View.INVISIBLE);
password.setVisibility(View.INVISIBLE);
myIntent = new Intent(GMapsActivity.this, GMapsActivity1.class);
startActivity(myIntent);
} else {
Toast.makeText(context, "password is invalid",  Toast.LENGTH_SHORT).show();
}
于 2012-07-06T06:54:59.610 回答
0

而不是写

Intent myIntent = null;
myIntent = new Intent(v.getContext(), GMapsActivity1.class);

添加

Intent myIntent = new Intent(getApplicationContext(), GMapsActivity1.class);

或者

Intent myIntent = new Intent(GMapsActivity.this, GMapsActivity1.class);
于 2012-07-06T06:55:13.597 回答
0

您需要在清单文件中添加此活动,否则它将无法启动并且会崩溃,我认为您没有这样做......

 <activity android:name="GMapsActivity1"
           android:launchMode="singleTop"></activity>
于 2012-07-06T06:58:54.810 回答
0

先放 startActivity(myIntent); 在 if 条件下并确保 setContentView(...); 在 GMapsActivity1 活动中正确定义以及在清单文件中添加 GMapsActivity1。还有一件事可能是可能的,即您可以使用 R.id.... 未在 layout.xml 中为此活动定义。

于 2012-07-06T07:10:50.557 回答
0

这是一个旧帖子,但我找到了一个尚未发布的解决方案。

使用调用活动时,您必须将 startActivityForResult 用于可能导致您尝试获取调用活动的活动的意图。

例子:

Intent intent=new Intent(MainActivity.this, NextActivity.class); startActivityForResult(意图,123);

于 2015-07-24T16:32:20.000 回答