org.json.JSONException:值不能为type.lang.String,不能转换为JSONObject

时间:2014-09-22 08:06:55

标签: android json exception

我见过其他帖子但是没有解决我的问题。 我从我以前的登录类中复制了代码但突然出现此错误(登录类正常工作)。

所以这是有错误的类:

public class Absensi extends Activity {
private static final String TAG_SUCCESS = "success";
private ProgressDialog pDialog;
byte statusByte;
private String payload = "";
JSONParser jsonParser;
SessionManagement session;
TextView t= null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_absensi);
    session = new SessionManagement(getApplicationContext());
    jsonParser = new JSONParser();
}

public void onResume(){
    super.onResume();
    if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
        processIntent(getIntent());
        new AbsenMahasiswa().execute();
    }
}

public void onBackPressed() {
    session.unsetDataKuliah();
    super.onBackPressed();
}

void processIntent(Intent intent) {
    NdefMessage[] message = getNdefMessages(getIntent());
    for(int i=0; i<message.length; i++) {
        for(int j=0; j<message[0].getRecords().length; j++){
            NdefRecord record = message[i].getRecords()[j];
            statusByte = record.getPayload()[0];
            int languageCodeLength = statusByte & 0x3F;
            int isUTF8 = statusByte-languageCodeLength;
            if(isUTF8 == 0x00){
                payload = new String(
                                    record.getPayload(),1+languageCodeLength,
                                    record.getPayload().length-1-languageCodeLength,
                                    Charset.forName("UTF-8"));
            }
            else if (isUTF8 == -0x80){
                payload = new String(
                                    record.getPayload(),1+languageCodeLength,
                                    record.getPayload().length-1-languageCodeLength,
                                    Charset.forName("UTF-16"));
            }
        }   
    }
}

NdefMessage[] getNdefMessages(Intent intent){
    NdefMessage[] msgs = null;
    if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())){
        Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
        if (rawMsgs != null) {
            msgs = new NdefMessage[rawMsgs.length];
            for (int i=0; i < rawMsgs.length; i++) {
                msgs[i] = (NdefMessage) rawMsgs[i];
            }
        }
        else {
            byte[] empty = new byte[] {};
            NdefRecord record = new NdefRecord(NdefRecord.TNF_UNKNOWN,
            empty, empty, empty);
            NdefMessage msg = new NdefMessage(new NdefRecord[] { record });
            msgs = new NdefMessage[] { msg };
        }
    }
    else {
        Log.d("Peer to Peer 2", "Unknown intent.");
        finish();
    }
    return msgs;
}

class AbsenMahasiswa extends AsyncTask<String, String, String> {
    @Override
    protected String doInBackground(String... args) {
        // TODO Auto-generated method stub
        String request = "absen";
        String npm = payload.substring(0,7);
        String id_perangkat = payload.substring(8, payload.length());

        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("request", request));
        params.add(new BasicNameValuePair("npm", npm));
        params.add(new BasicNameValuePair("id_perangkat", id_perangkat));
        params.add(new BasicNameValuePair("kode", session.getKodeKuliah()));
        params.add(new BasicNameValuePair("jenis", session.getJenisKuliah()));
        params.add(new BasicNameValuePair("shift", session.getShiftKuliah()));
        Log.d("DATA", jsonParser.makeHttpRequest(session.getUrl(),"POST", params).toString());

        return null;
    }
}

这是我的logcat,json继续返回上一个对象:

09-22 14:54:39.847: E/JSON Parser(16997): Error parsing data org.json.JSONException: Value Cannot of type java.lang.String cannot be converted to JSONObject
09-22 14:54:39.847: D/DATA(16997): {"data":[{"jenis":"Praktikum","kode":"AIF102","jam":"12:00:00","nama":"Algoritma Struktur Dasar","shift":"2","hari":"Rabu","ruangan":"Lab917"}],"success":1}

我在PHP上尝试了它并给出了回复:

{"success":1,"message":"Data proccessing success"}

JSON类:

public class JSONParser {

static InputStream is = null;
static JSONObject jObj = null;
static String json = "";

// function get json from url
// by making HTTP POST or GET mehtod
public JSONObject makeHttpRequest(String url, String method, List<NameValuePair> params) {

    // Making HTTP request
    try {
        // check for request method
        if(method == "POST") {
            // request method is POST
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);
            httpPost.setEntity(new UrlEncodedFormEntity(params));

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

        }
        else if(method == "GET") {
            // request method is GET
            DefaultHttpClient httpClient = new DefaultHttpClient();
            String paramString = URLEncodedUtils.format(params, "utf-8");
            url += "?" + paramString;
            HttpGet httpGet = new HttpGet(url);

            HttpResponse httpResponse = httpClient.execute(httpGet);
            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;

}

1 个答案:

答案 0 :(得分:1)

响应将始终是一个字符串,您应该在解析

之前将其初始化为JSON对象
JSONObject object = new JSONObject(responseString);