2013-05-13 55 views
0

`我越来越致命异常:主要在Android和应用程序没有得到执行在模拟器上?

public class JsonExampleActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_json_example); 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost("http://codeincloud.tk/json_android_example.php"); 
     TextView textView = (TextView)findViewById(R.id.textView1); 
     try { 

      HttpResponse response = httpclient.execute(httppost); 
      String jsonResult = inputStreamToString(response.getEntity().getContent()).toString(); 
      JSONObject object = new JSONObject(jsonResult); 

      String name = object.getString("name"); 
      String verion = object.getString("version"); 
      textView.setText(name + " - " + verion); 

     } 
     catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } 
     catch (IOException e) { 
      e.printStackTrace(); 
     } 


     } 
    private StringBuilder inputStreamToString(InputStream is) { 
     String rLine = ""; 
     StringBuilder answer = new StringBuilder(); 
     BufferedReader rd = new BufferedReader(new InputStreamReader(is)); 

     try { 
     while ((rLine = rd.readLine()) != null) 
      answer.append(rLine); 
      } 
     } 

     catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return answer; 
     } 
}` 
+3

你正在做的网络I /主(UI)螺纹O。这已经是一件坏事了。您的POST请求可能需要很长时间才能执行,同时您已阻止主线程。 – 2013-05-13 07:30:53

+2

正如@大卫建议,你应该创建一个新的线程执行网络I/O操作(考虑使用AsyncTask http://developer.android.com/reference/android/os/AsyncTask.html) – GVillani82 2013-05-13 07:42:13

+0

也许你可以发布堆栈跟踪的错误,所以我们可以看到问题是什么。 – 2013-05-13 07:56:14

回答

-1

异常的基础似乎是从“FileOutputStream.write”的到来, 你添加的写入权限,您的清单?

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
+2

你是如何确定的? – 2013-05-13 07:29:21

+0

是的..但仍然得到相同的错误 – user2376696 2013-05-13 07:33:38

-1

当您尝试从某个线程更新您无法做到的视图时,会发生此错误。您将需要从onPostExecute更新您的视图,或使用runOnUiThread更新您的视图。

您可以使用runOnUiThread如下:

runOnUiThread(new Runnable() { 
    public void run() {      
     // your code to update the UI thread here    
    } 
}); 
+0

'... onPostExecute或使用runOnUiThread ...'我在这里没有看到任何其他'线程'或'AsyncTask' ... – Selvin 2013-05-13 07:39:29

相关问题