2016-04-19 15 views
0
04-19 12:39:23.139 2933-2943/? E/art: Failed sending reply to debugger: Broken pipe 
04-19 12:39:32.248 2933-2950/net.pushyfurball.currencyconversion E/Surface: getSlotFromBufferLocked: unknown buffer: 0xb4095db0 
04-19 12:39:32.254 2933-2933/net.pushyfurball.currencyconversion E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: net.pushyfurball.currencyconversion, PID: 2933 
    java.lang.NullPointerException: Attempt to invoke virtual method 'int org.json.JSONObject.length()' on a null object reference 
    at net.pushyfurball.currencyconversion.MainActivity$JSONParse.onPostExecute(MainActivity.java:89) 
    at net.pushyfurball.currencyconversion.MainActivity$JSONParse.onPostExecute(MainActivity.java:59) 
    at android.os.AsyncTask.finish(AsyncTask.java:651) 
    at android.os.AsyncTask.-wrap1(AsyncTask.java) 
    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

, dass der Fehler, das ich erhalte, wenn ich den Code zu verwenden, ich versuche, wie folgt:JSONArray & JSONObject Fehler

package net.pushyfurball.currencyconversion; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.Button; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.SimpleAdapter; 
import android.widget.TextView; 
import android.widget.Toast; 

import org.json.JSONException; 
import org.json.JSONObject; 

import java.util.ArrayList; 
import java.util.HashMap; 

public class MainActivity extends Activity { 
ListView list; 
TextView code; 
TextView name; 
TextView rate; 
Button Btngetdata; 
ArrayList<HashMap<String, String>> exchangeRate = new ArrayList<HashMap<String, String>>(); 

//URL to get JSON Array 
private static String url = "http://www.floatrates.com/daily/usd.json"; 

//JSON Node Names 
private static final String TAG_CODE = "code"; 
private static final String TAG_NAME = "name"; 
private static final String TAG_RATE = "rate"; 

JSONObject currentRates = null; 

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

    setContentView(R.layout.activity_main); 
    exchangeRate = 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(); 
     code = (TextView)findViewById(R.id.code); 
     name = (TextView)findViewById(R.id.name); 
     rate = (TextView)findViewById(R.id.rate); 
     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 
      for(int i = 0; i < currentRates.length(); i++){ 
       JSONObject c = currentRates; 

       // Storing JSON item in a Variable 
       String code = c.getString(TAG_CODE); 
       String name = c.getString(TAG_NAME); 
       String rate = c.getString(TAG_RATE); 

       // Adding value HashMap key => value 

       HashMap<String, String> map = new HashMap<String, String>(); 

       map.put(TAG_CODE, code); 
       map.put(TAG_NAME, name); 
       map.put(TAG_RATE, rate); 

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

       ListAdapter adapter = new SimpleAdapter(MainActivity.this, exchangeRate, 
         R.layout.list_v, 
         new String[] { TAG_CODE,TAG_NAME, TAG_RATE }, new int[] { 
         R.id.code,R.id.name, R.id.rate}); 

       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 "+exchangeRate.get(+position).get("name"), Toast.LENGTH_SHORT).show(); 

        } 
       }); 

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

    } 
} 

} 

ich das Problem, wenn die Datei von http://www.floatrates.com/daily/usd.json zu ziehen versucht (was Sie sehen können im Code). Die einzigen Fehler, die ich halb herausfinden kann, ist die Tatsache, dass passiert bei der currentRate.length(), aber nicht sicher, warum. Als mein Freund mir den Code schickte, nachdem ich aufgegeben hatte, sagte er, dass ich das JSONArray zu JSONObject ändern müsste wegen der JSON-Datei, die ich zu ziehen versuche.

Antwort

0

Ihr JSONObject currentRates Objekt null verwiesen wird,

JSONObject currentRates = null; 

, wenn sein Wert null ist, und Sie tun dies currentRates.length(); Sie erhalten eine NPE

+0

Richtig, aber ich versuche, die JSON-URL zu importieren, um aktuelleRates zu füllen, so dass es das Array erstellt. –

0

check this out:

JSONObject currentRates = null; 

Sets currentRates zu null.

Wenn Sie nie diesen Verweis auf einen Wert ungleich Null gesetzt, dieser Code:

for(int i = 0; i < currentRates.length(); i++) 

immer eine Nullpointer werfen.

Versuchen Sie, aktuelleRaten einzustellen.

Verwandte Themen