بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
مشکل با json - .NET
مشکل با json - .NET
سلام دوستان من به مشکل بسیار عجیبی برخوردم اگه میشه کمکم کنید
مشکل حل شد باید از روش mvc استفاده کرد
این همین سوال تو stackoverflow.com کلیک کنید
وقتی که با ماژول وب سرویس یا کلاس وب سرویس برنامه رو اجرا میکنم میره توی بلاک UNKNOWN_EXCEPTION و لاگ اون هم اینه
09-2100:44:39.790: W/System.err(2673):java.lang.NullPointerException
09-2100:44:39.790: W/System.err(2673):atcom.uncocoder.course.app.webservice_module.ModuleWebservice$1.run(ModuleWebservice.java:141)
09-2100:44:39.790: W/System.err(2673):at java.lang.Thread.run(Thread.java:856)
میگه دیتا نال ـه خوب ولی نال نیست
این کلاس وب ماژول من
public class ModuleWebservice {
public static final int PROTOCOL_EXCEPTION = -1;
public static final int IO_EXCEPTION = -2;
public static final int UNKNOWN_EXCEPTION = -3;
public static interface Listener {
public void onDataReceive(String data);
public void onFail(int statusCode);
}
private String cacheFileName;
private String url;
private ArrayList<NameValuePair> inputArguments;
private Listener listener;
private boolean enableCache;
private String cacheDir;
private long cacheExpireTime;
private int connectionTimeout;
private int socketTimeout;
public ModuleWebservice url(String value) {
url = value;
return this;
}
public ModuleWebservice inputArguments(ArrayList<NameValuePair> value) {
inputArguments = value;
return this;
}
public ModuleWebservice listener(Listener value) {
listener = value;
return this;
}
/**
* @value path without last directory seprator <br/>
* ex: <b>/sdcard/your_project/cacheDir
*/
public ModuleWebservice cacheDir(String value) {
cacheDir = value;
return this;
}
public ModuleWebservice enableCache(boolean value) {
enableCache = value;
return this;
}
public ModuleWebservice cacheExpireTime(long value) {
cacheExpireTime = value;
return this;
}
public ModuleWebservice connectionTimeout(int value) {
connectionTimeout = value;
return this;
}
public ModuleWebservice socketTimeout(int value) {
socketTimeout = value;
return this;
}
public void read() {
String data = null;
if (enableCache) {
cacheFileName = createCacheFileName();
data = readFromCache();
}
if (data == null) {
readFromNet();
} else {
if (listener != null) {
listener.onDataReceive(data);
return;
}
}
}
public void readFromNet() {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
HttpParams params = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(params, connectionTimeout);
HttpConnectionParams.setSoTimeout(params, socketTimeout);
HttpClient client = new DefaultHttpClient(params);
HttpPost request = new HttpPost(url);
request.setEntity(new UrlEncodedFormEntity(inputArguments));
HttpResponse httpResponse = (HttpResponse) client.execute(request);
String data = streamToString(httpResponse.getEntity().getContent());
if (enableCache) {
saveToCache(System.currentTimeMillis(), data);
}
if (listener != null) {
listener.onDataReceive(data);
return;
}
}
catch (ClientProtocolException e) {
e.printStackTrace();
if (listener != null) {
listener.onFail(PROTOCOL_EXCEPTION);
}
}
catch (IOException e) {
e.printStackTrace();
if (listener != null) {
listener.onFail(IO_EXCEPTION);
}
}
catch (Exception e) {
e.printStackTrace();
if (listener != null) {
listener.onFail(UNKNOWN_EXCEPTION);
}
}
}
});
thread.start();
}
private String createCacheFileName() {
String output = url;
for (NameValuePair input: inputArguments) {
output += ";" + input.getName() + ":" + input.getValue();
}
String sha1 = sha1(output);
return sha1 + ".dat";
}
final private static char[] hexArray = "0123456789ABCDEF".toCharArray();
private String bytesToHex(byte[] bytes) {
char[] hexChars = new char[bytes.length * 2];
for (int j = 0; j < bytes.length; j++)
{
int v = bytes[j] & 0xFF;
hexChars[j * 2] = hexArray[v >>> 4];
hexChars[j * 2 + 1] = hexArray[v & 0x0F];
}
return new String(hexChars);
}
private String sha1(String toHash) {
String hash = null;
try {
MessageDigest digest = MessageDigest.getInstance("SHA-1");
byte[] bytes = toHash.getBytes("UTF-8");
digest.update(bytes, 0, bytes.length);
bytes = digest.digest();
hash = bytesToHex(bytes);
}
catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return hash;
}
private String streamToString(InputStream inputStream) {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder stringBuffer = new StringBuilder();
String line = null;
try {
while ((line = bufferedReader.readLine()) != null) {
stringBuffer.append((line + "\n"));
}
}
catch (IOException e) {
e.printStackTrace();
} finally {
try {
inputStream.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
return stringBuffer.toString();
}
private void saveToCache(long when, String data) {
ObjectOutputStream outputStream = null;
try {
outputStream = new ObjectOutputStream(new FileOutputStream(cacheDir + "/" + cacheFileName));
outputStream.writeLong(when);
outputStream.writeInt(data.length());
outputStream.write(data.getBytes());
}
catch (StreamCorruptedException e) {
e.printStackTrace();
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
} finally {
if (outputStream != null) {
try {
outputStream.flush();
}
catch (IOException e) {
e.printStackTrace();
}
try {
outputStream.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
}
private String readFromCache() {
ObjectInputStream inputStream = null;
try {
inputStream = new ObjectInputStream(new FileInputStream(cacheDir + "/" + cacheFileName));
long when = inputStream.readLong();
long now = System.currentTimeMillis();
if (now - when > cacheExpireTime * 1000) {
new File(cacheDir + "/cache.dat").delete();
return null;
}
int bytesLength = inputStream.readInt();
byte[] buffer = new byte[bytesLength];
inputStream.read(buffer, 0, bytesLength);
String output = new String(buffer);
return output;
}
catch (StreamCorruptedException e) {
e.printStackTrace();
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (inputStream != null) {
inputStream.close();
}
}
catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
}
اینم کلاس اصلی من
package com.uncocoder.course.app.webservice_module;
import java.util.ArrayList;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import android.util.Log;
public class TestModuleWebservice {
public static void test1() {
ModuleWebservice module = new ModuleWebservice();
ModuleWebservice.Listener listener = new ModuleWebservice.Listener() {
@Override
public void onDataReceive(String data) {
Log.i("LOG", "Webservice Data: " + data);
}
@Override
public void onFail(int statusCode) {
switch (statusCode) {
case ModuleWebservice.IO_EXCEPTION:
Log.i("LOG", "IO Exception");
break;
case ModuleWebservice.PROTOCOL_EXCEPTION:
Log.i("LOG", "PROTOCOL Exception");
break;
case ModuleWebservice.UNKNOWN_EXCEPTION:
Log.i("LOG", "UNKNOWN Exception");
break;
}
}
};
ArrayList<NameValuePair> input = new ArrayList<NameValuePair>();
input.add(new BasicNameValuePair("name", "Behnam"));
module.url("http://10.45.205.225/api/province")
.inputArguments(input)
.listener(listener)
.cacheDir(G.DIR_CACHE)
.enableCache(true)
.cacheExpireTime(30)
.connectionTimeout(3000)
.socketTimeout(5000)
.read();
}
}
برای این سوال پاسخی وجود ندارد.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .