我在这里运行异步线程。
SharedPreferences orderSp =getActivity().getSharedPreferences("order_id", 0);
String orderSeller = orderSp.getString("orderSeller", "");
new ProductToCard(getActivity(), productName, quantity + "", getString(R.string.ProductToCardUrl), finaPrice + "").execute();
我的productToCard类
package com.inshoka.retail.Server;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.Snackbar;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import com.inshoka.retail.Activity.Pakhsh;
import com.inshoka.retail.Activity.sabad;
import com.inshoka.retail.R;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
/**
* Created by lenovo on 7/23/2017.
*/
public class ProductToCard extends AsyncTask {
private Pakhsh context;
private CoordinatorLayout coordinatorLayout;
private String product_Name,Quantity,order_id="",Buyerat = "",Link,seller_id="",buyer_id="",str="",finalPrice="";
public ProductToCard(Activity context, String productName, String quantity, String link, String final_price){
this.context=(Pakhsh) context;
product_Name=productName;
Quantity=quantity;
Link=link;
finalPrice=final_price;
Buyerat=context.getString(R.string.BuyerAt);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
SharedPreferences sellerSp = context.getSharedPreferences("SellerID",0);
seller_id=sellerSp.getString("SellerID","");
SharedPreferences userSp = context.getSharedPreferences("usersp",0);
buyer_id=userSp.getString("buyer_id","");
SharedPreferences orderSp = context.getSharedPreferences("order_id",0);
order_id=orderSp.getString("order_id","");
}
@Override
protected Object doInBackground(Object[] params) {
try {
String data= URLEncoder.encode("seller_id","UTF8")+"="+URLEncoder.encode(seller_id,"UTF8");
data+="&"+URLEncoder.encode("buyer_id","UTF8")+"="+URLEncoder.encode(buyer_id,"UTF8");
data+="&"+URLEncoder.encode("order_status","UTF8")+"="+URLEncoder.encode("4","UTF8");
data+="&"+URLEncoder.encode("order_id","UTF8")+"="+URLEncoder.encode(order_id,"UTF8");
data+="&"+URLEncoder.encode("Buyerat", "UTF8")+"="+URLEncoder.encode(Buyerat, "UTF8");
data+="&"+URLEncoder.encode("quantity", "UTF8")+"="+ URLEncoder.encode(Quantity, "UTF8");
data+="&"+URLEncoder.encode("product_name", "UTF8")+"="+URLEncoder.encode(product_Name, "UTF8");
data+="&"+URLEncoder.encode("product_final_price", "UTF8")+"="+URLEncoder.encode(finalPrice, "UTF8");
URL myLink= new URL(Link);
URLConnection connection=myLink.openConnection();
connection.setDoOutput(true);
OutputStreamWriter wr=new OutputStreamWriter(connection.getOutputStream());
wr.write(data);
wr.flush();
BufferedReader reader=new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuilder sb=new StringBuilder();
String Line=null;
while ((Line=reader.readLine()) != null){
sb.append(Line);
}
str=sb.toString();
}catch (Exception e){
// Toast.makeText(context,e.toString()+"",Toast.LENGTH_LONG).show();
Toast.makeText(context,"خطا-لطفا مجددا تلاش کنید1",Toast.LENGTH_LONG).show();
}
return null;
}
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
DrawerLayout mRootView = (DrawerLayout) context.findViewById(R.id.pakhsh_activity);
if (str.equals("ok")){
Snackbar snackbar=Snackbar.make(mRootView,"با موفقیت اضافه شد",4000);
View view1=snackbar.getView();
TextView textView= (TextView) view1.findViewById(android.support.design.R.id.snackbar_text);
TextView textView1= (TextView) view1.findViewById(android.support.design.R.id.snackbar_action);
textView.setGravity(GravityCompat.END);
textView.setTextColor(context.getResources().getColor(R.color.colorTextSecondLight));
textView1.setTextColor(context.getResources().getColor(R.color.yellow));
snackbar.setAction("مشاهده سبد خرید", new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(context,sabad.class);
context.startActivity(intent);
}
});
snackbar.show();
}else{
Toast.makeText(context,"22",Toast.LENGTH_LONG).show();
}
}
}
当我运行这段代码时,onPreExecute
方法效果很好,但是doInBackground
方法的大量调用和应用程序强制关闭。
我的日志错误:
08-18 13:06:46.261 4823-4851/com.inshoka.retail E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #3
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:278)
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)
Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:121)
at android.widget.Toast$TN.<init>(Toast.java:317)
at android.widget.Toast.<init>(Toast.java:91)
at android.widget.Toast.makeText(Toast.java:233)
at com.inshoka.retail.c.h.doInBackground(Unknown Source)
at android.os.AsyncTask$2.call(AsyncTask.java:264)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)