在android中的后台方法剂量调用中执行

时间:2018-08-18 15:29:15

标签: java android

我在这里运行异步线程。

 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) 

0 个答案:

没有答案