0

私はこのようなコードを持っています。これは作成中です

 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); 
            mgr=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
    LocationListener ll=new mylocatoinlis();
    mgr.requestLocationUpdates(LocationManager.GPS_PROVIDER,3600l,0,ll);
          }

これはロケーションリスナークラスです

protected class mylocatoinlis implements LocationListener {

        public void onLocationChanged(Location location) {
            // TODO Auto-generated method stub
            if(location!=null)
            {
                double plong=location.getLongitude();
                double plate=location.getLatitude();
                //Log.i("MyLocation",Double.toString(plate)+" "+Double.toString(plong));

                ingformation(plate,plong);

            }

        }

        public void onProviderDisabled(String provider) {
            // TODO Auto-generated method stub

        }

        public void onProviderEnabled(String provider) {
            // TODO Auto-generated method stub

        }

        public void onStatusChanged(String provider, int status, Bundle extras) {
            // TODO Auto-generated method stub

        }



    }

これはjsonラッパー関数です

public void ingformation(double plate, double plong) {
    // TODO Auto-generated method stub
     try
        {   
            client=new DefaultHttpClient();
             StringBuilder url1=new StringBuilder(URL);
             url1.append(plate+","+plong+".json");           
             HttpGet get=new HttpGet(url1.toString());
             HttpResponse r=client.execute(get);
             int status=r.getStatusLine().getStatusCode();
             if(status==200){
                 HttpEntity e=r.getEntity();
                String data=EntityUtils.toString(e);

                 obj= new JSONObject(data);

                 main=obj.getJSONObject("current_observation");
                 maintemp=main.getJSONObject("display_location");
                 tv1.setText(" "+maintemp.getString("city"));
                 tv3.setText(" "+main.getString("weather"));
                 tv2.setText(" "+main.getString("temp_c")+" C");
                 String imageName=main.getString("icon_url");
                 //String imageName1.append("nt_"+imageName);
                 //im.setImageURI(Uri.parse(url1.toString()+imageName));
                 if(imageName!="")
                 {
                     wv.setVisibility(View.VISIBLE);
                     wv.loadUrl(imageName);
                 }
                 else
                 {
                     wv.setVisibility(View.INVISIBLE);
                 }
                 //wv.loadUrl(imageName);


             }
        }catch(Exception e)
        {
            Log.e("JSON Parser", "Unable to connect" + e.toString());
        }

}

DDMSを介してロケーションを渡すと、NetworkOnMainThread例外のようなエラーが発生します。私が白黒の場所とjsonをスタックするのを手伝ってください。

4

2 に答える 2

0

HTTPGet別のスレッドでネットワーク操作()を実行する必要があります。非同期タスクの使用が最適です。

編集:

たとえば、次の内部クラスを追加します。

class MyTask extends AsyncTask<Double, Void, Void>
{

    MyCallback callback;

    public MyTask(Callback callback)
    {
        this.callback = callback;
    }

    @Override
    public Void doInBackground(Double... coordinates)
    {
        double plong = coordinates[0];
        double plat = coordinates[1];
        //...Complete task

        return null;
    }

    @Override
    public void onPostExecute()
    {
        callback.go();
    }

}

public interface Callback
{
    //override to handle actions after task completes
    public void go();
}
于 2012-10-28T16:12:16.450 に答える
0

ハニカムからAsyncTaskを使用する必要があります。メインスレッド(プロセス)でネットワークプロセスを使用することはできません。非同期タスクを検索してください。

于 2012-10-28T16:13:36.353 に答える