2016-06-16 36 views
-1

Ich möchte unter Daten analysieren, aber ich habe einen Fehler, wenn ich andere URL wie diese versuchen http://api.learn2crack.com/android/jsonos/ für die Analyse von JSON-Daten kann ich Daten analysieren, aber wenn ich unten Code für das Parsing versuchen habe ich ein unter Fehler.Json Parsing Fehler bei Android

Activity jsonparse.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{41b86fb8 V.E..... R......D 0,0-580,162} that was originally added here 
android.view.WindowLeaked: Activity jsonparse.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{41b86fb8 V.E..... R......D 0,0-580,162} that was originally added here 
at android.view.ViewRootImpl.<init>(ViewRootImpl.java:409) 
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:218) 
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) 
at android.app.Dialog.show(Dialog.java:281) 
at jsonparse.MainActivity$DownloadJSON.onPreExecute(MainActivity.java:58) 
at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586) 
at android.os.AsyncTask.execute(AsyncTask.java:534) 
at jsonparse.MainActivity.onCreate(MainActivity.java:38) 
at android.app.Activity.performCreate(Activity.java:5122) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2307) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2395) 
at android.app.ActivityThread.access$600(ActivityThread.java:162) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1364) 
at android.os.Handler.dispatchMessage(Handler.java:107) 
at android.os.Looper.loop(Looper.java:194) 
at android.app.ActivityThread.main(ActivityThread.java:5371) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:525) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
at dalvik.system.NativeStart.main(Native Method) 

)

{ 
     "AllUsersResult":[ 
      { 
       "GroupID":null, 
       "ID":1, 
       "Password":"1234", 
       "Role":null, 
       "Username":"admin", 
       "customerID":null 
      } 
     ] 

} 

MainActivity Klasse

public class MainActivity extends Activity { 
    ListView list; 
    TextView ver; 
    TextView name; 
    TextView api; 
    Button Btngetdata; 
    ArrayList<HashMap<String, String>> oslist = new ArrayList<HashMap<String, String>>(); 

    //URL to get JSON Array 
    private static String url = "http://192.168.0.39:8090/TrackBinSvc.svc/AllUsers/admin/1234"; 

    //JSON Node Names 
    private static final String TAG_OS = "AllUsersResult"; 
    private static final String TAG_VER = "GroupID"; 
    private static final String TAG_NAME = "Password"; 
    private static final String TAG_API = "Username"; 

    JSONArray android = null; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 
     oslist = new ArrayList<HashMap<String, String>>(); 

     Btngetdata = (Button)findViewById(R.id.getdata); 
     Btngetdata.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       new JSONParse().execute(); 
      } 
     }); 
    } 

    private class JSONParse extends AsyncTask<String, String, JSONObject> { 
     private ProgressDialog pDialog; 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      ver = (TextView)findViewById(R.id.vers); 
      name = (TextView)findViewById(R.id.name); 
      api = (TextView)findViewById(R.id.api); 
      pDialog = new ProgressDialog(MainActivity.this); 
      pDialog.setMessage("Getting Data ..."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(true); 
      pDialog.show(); 
     } 

     @Override 
     protected JSONObject doInBackground(String... args) { 
      JSONParser jParser = new JSONParser(); 

      // Getting JSON from URL 
      JSONObject json = jParser.getJSONFromUrl(url); 
      return json; 
     } 
     @Override 
     protected void onPostExecute(JSONObject json) { 
      pDialog.dismiss(); 
      try { 
        // Getting JSON Array from URL 
        android = json.getJSONArray(TAG_OS); 
        for(int i = 0; i < android.length(); i++){ 
        JSONObject c = android.getJSONObject(i); 

        // Storing JSON item in a Variable 
        String ver = c.getString(TAG_VER); 
        String name = c.getString(TAG_NAME); 
        String api = c.getString(TAG_API); 

        // Adding value HashMap key => value 
        HashMap<String, String> map = new HashMap<String, String>(); 
        map.put(TAG_VER, ver); 
        map.put(TAG_NAME, name); 
        map.put(TAG_API, api); 

        oslist.add(map); 
        list = (ListView)findViewById(R.id.list); 

        ListAdapter adapter = new SimpleAdapter(MainActivity.this, oslist, 
          R.layout.list_v, 
          new String[] { TAG_VER,TAG_NAME, TAG_API }, new int[] { 
            R.id.vers,R.id.name, R.id.api}); 

        list.setAdapter(adapter); 
        list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

         @Override 
         public void onItemClick(AdapterView<?> parent, View view, 
               int position, long id) { 
          Toast.makeText(MainActivity.this, "You Clicked at "+oslist.get(+position).get("name"), Toast.LENGTH_SHORT).show(); 

         } 
        }); 

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

JSONParser Klasse

public class JSONParser { 
    static InputStream is = null; 
    static JSONObject jObj = null; 
    static String json = ""; 

    // constructor 
    public JSONParser() { 

    } 

    public JSONObject getJSONFromUrl(String url) { 
     // Making HTTP request 
     try { 
      // defaultHttpClient 
      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      HttpPost httpPost = new HttpPost(url); 

      HttpResponse httpResponse = httpClient.execute(httpPost); 
      HttpEntity httpEntity = httpResponse.getEntity(); 
      is = httpEntity.getContent();   

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

     try { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(
        is, "iso-8859-1"), 8); 
      StringBuilder sb = new StringBuilder(); 
      String line = null; 
      while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n"); 
      } 
      is.close(); 
      json = sb.toString(); 
     } catch (Exception e) { 
      Log.e("Buffer Error", "Error converting result " + e.toString()); 
     } 

     // try parse the string to a JSON object 
     try { 
      jObj = new JSONObject(json); 
     } catch (JSONException e) { 
      Log.e("JSON Parser", "Error parsing data " + e.toString()); 
     } 

     // return JSON String 
     return jObj; 
    } 
} 
+0

Bitte zeigen Sie die Ausnahmebedingungsnachricht (e.toString()) – Dezigo

+0

Ich aktualisiere Fehler nach oben – Diego

+0

der Fehler ist nicht in der Analyse .. Es heißt Fenster durchgesickert. siehe: http://stackoverflow.com/questions/2850573/activity-has-leaked-window-that-was- ursprünglich- hinzugefügt –

Antwort

0

Ich bin vorschlagen, dass Sie Daten mit Volley Bibliothek analysieren es einfach zu bedienen ist und auch flexibel! Here is Tutorial link !

Hoffe, das wird dir helfen! Prost !

0

Ihre JSONParse Klasse Um dies zu ändern ..

private class JSONParse extends AsyncTask<String, String, ArrayList<HashMap<String, String>>> { 
    private ProgressDialog pDialog; 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     ver = (TextView)findViewById(R.id.vers); 
     name = (TextView)findViewById(R.id.name); 
     api = (TextView)findViewById(R.id.api); 
     pDialog = new ProgressDialog(MainActivity.this); 
     pDialog.setMessage("Getting Data ..."); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(true); 
     pDialog.show(); 
    } 

    @Override 
    protected ArrayList<HashMap<String, String>> doInBackground(String... args) { 
     JSONParser jParser = new JSONParser(); 

     // Getting JSON from URL 
     JSONObject json = jParser.getJSONFromUrl(url); 
     if(json!=null) 
     { 
      // Getting JSON Array from URL 
       android = json.getJSONArray(TAG_OS); 
       for(int i = 0; i < android.length(); i++){ 
       JSONObject c = android.getJSONObject(i); 

       // Storing JSON item in a Variable 
       String ver = c.getString(TAG_VER); 
       String name = c.getString(TAG_NAME); 
       String api = c.getString(TAG_API); 

       // Adding value HashMap key => value 
       HashMap<String, String> map = new HashMap<String, String>(); 
       map.put(TAG_VER, ver); 
       map.put(TAG_NAME, name); 
       map.put(TAG_API, api); 

       oslist.add(map); 

       return oslist; 
      } 
     //else DATA Not Found or Server not connected 

    } 
    @Override 
    protected void onPostExecute(ArrayList<HashMap<String, String>> result_list) { 
     if(pDialog!=null) 
     { 
     pDialog.dismiss(); 
     } 

       list = (ListView)findViewById(R.id.list); 

       ListAdapter adapter = new SimpleAdapter(MainActivity.this, result_list, 
         R.layout.list_v, 
         new String[] { TAG_VER,TAG_NAME, TAG_API }, new int[] { 
           R.id.vers,R.id.name, R.id.api}); 

       list.setAdapter(adapter); 
       list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

        @Override 
        public void onItemClick(AdapterView<?> parent, View view, 
              int position, long id) { 
         Toast.makeText(MainActivity.this, "You Clicked at "+result_list.get(+position).get("name"), Toast.LENGTH_SHORT).show(); 

        } 
       }); 

       } 
    } 
} 

Hope this Ihnen helfen.