2016-04-19 3 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) 

Это ошибка, я получаю, когда я пытаюсь использовать код следующим образом:JSONArray & JSONObject Ошибка

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(); 
     } 

    } 
} 

} 

У меня есть вопрос при попытке вытащить файл из http://www.floatrates.com/daily/usd.json (который вы можете увидеть в коде). Единственными ошибками, которые я могу полуопределить, является тот факт, что это происходит в currentRate.length(), но не уверен, почему. Когда мой друг прислал мне код после того, как я сдался, он сказал, что мне нужно будет изменить JSONArray на JSONObject из-за json-файла, который я пытаюсь вытащить.

ответ

0

ваш объект JSONObject currentRates является нулевой ссылки,

JSONObject currentRates = null; 

, если его значение равно нулю, и вы сделаете это currentRates.length(); вы получите NPE

+0

Правильно, но я пытаюсь импортировать URL-адрес json для заполнения currentRates, чтобы он создавал массив. –

0

проверить это:

JSONObject currentRates = null; 

наборы currentRates to null.

Если вы никогда не установить эту ссылку на ненулевое значение, этот код:

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

всегда будет бросать NullPointerException.

Попробуйте установить currentRates.

Смежные вопросы