循环等待意图结果(Java Android)

循环等待意图结果(Java Android),java,android,Java,Android,我真的很新,所以不要笑得太厉害。。。或者说话太隐晦。。。 我已经搜索、试验和搜索了。。。我在学习,但我也越来越糊涂了 我需要在SD卡上的一个文件夹中循环,并在另一个android应用程序成功处理/打印每个.html文件后,通过android intents逐个发送该文件夹中任何.html文件的每个实例。让我们打印Droid(一款非常适合网络连接打印机的打印应用程序)。 此应用程序只能接受一个文件,处理该文件,渲染该文件等,然后将其发送到打印机,然后通过意图发送回结果好或坏 我尝试过各种睡眠选项(

我真的很新,所以不要笑得太厉害。。。或者说话太隐晦。。。 我已经搜索、试验和搜索了。。。我在学习,但我也越来越糊涂了

我需要在SD卡上的一个文件夹中循环,并在另一个android应用程序成功处理/打印每个.html文件后,通过android intents逐个发送该文件夹中任何.html文件的每个实例。让我们打印Droid(一款非常适合网络连接打印机的打印应用程序)。 此应用程序只能接受一个文件,处理该文件,渲染该文件等,然后将其发送到打印机,然后通过意图发送回结果好或坏

我尝试过各种睡眠选项(我知道这是一种糟糕的做法!)并等待和通知(我相信更好吧?),但我无法让它打印出超过它找到的第一个或最后一个文件(取决于我的代码!)

下面是我的代码的一个版本。这个版本通过“Lets Print Driod”应用程序发送它处理的第一个文件,然后继续循环,尽管显示我的Toast消息“Waiting loop number-->”

有人能告诉我在我的循环中收到意图结果后使用wait和notify的正确方法吗

非常感谢你的帮助

package com.my.test;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.widget.Toast;

public class MainActivity extends Activity {
    String received_results_from_LPD = "YES";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        try {
            print_all_html();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
    }


    public synchronized void print_all_html() throws InterruptedException {
        received_results_from_LPD = "YES";

        for(int x = 1; x < 6; x = x+1) {
        if (received_results_from_LPD == "YES") {
        Intent i = new Intent(Intent.ACTION_VIEW);
        i.setClassName("com.blackspruce.lpd","com.blackspruce.lpd.WebPrint");
        i.setData( Uri.parse("file:///storage/emulated/0/Pictures/test" + x + ".html"));
        Toast.makeText(getApplicationContext(), "Loop Position " + x, Toast.LENGTH_SHORT).show();
        Toast.makeText(getApplicationContext(), "Value of LPD " + received_results_from_LPD, Toast.LENGTH_SHORT).show();
        Toast.makeText(getApplicationContext(), "Printing " + "test" + x + ".html", Toast.LENGTH_SHORT).show();
        received_results_from_LPD = "NO"; //reset for next time
        startActivityForResult(i, 99);
        //wait();
        }
        else Toast.makeText(getApplicationContext(), "Waiting loop number --> " + x, Toast.LENGTH_SHORT).show();
        received_results_from_LPD = "NO";
        Thread.sleep(1000);
        }
    }



    @Override
    protected synchronized void onActivityResult(int requestCode, int resultCode, Intent data) {
                  // TODO Auto-generated method stub
                    super.onActivityResult(requestCode, resultCode, data);
    if (data != null && requestCode == 99 && resultCode == RESULT_OK) {
        //successful 
        Toast.makeText(getApplicationContext(), "Sucessfull", Toast.LENGTH_SHORT).show();
        received_results_from_LPD = "YES";
        //notify();
    }
    else {
        //not successful
        Toast.makeText(getApplicationContext(), "oopps!!!!", Toast.LENGTH_SHORT).show();
        received_results_from_LPD = "YES";
        //notify();
        }
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}
package com.my.test;
导入android.app.Activity;
导入android.content.Intent;
导入android.net.Uri;
导入android.os.Bundle;
导入android.view.Menu;
导入android.widget.Toast;
公共类MainActivity扩展了活动{
字符串从\u LPD=“是”接收\u结果;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
试一试{
打印所有html();
}捕捉(中断异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
} 
}
public synchronized void print_all_html()引发InterruptedException{
收到来自_LPD=“是”的_结果;
对于(int x=1;x<6;x=x+1){
如果(收到来自LPD的结果=“是”){
意向i=新意向(意向.行动\视图);
i、 setClassName(“com.blackstruce.lpd”、“com.blackstruce.lpd.WebPrint”);
i、 setData(Uri.parse(“file:///storage/emulated/0/Pictures/test“+x+”.html”);
Toast.makeText(getApplicationContext(),“循环位置”+x,Toast.LENGTH\u SHORT.show();
Toast.makeText(getApplicationContext(),“LPD的值”+从\u LPD,Toast.LENGTH\u SHORT.show()收到的\u结果\u);
Toast.makeText(getApplicationContext(),“Printing”+“test”+x+“.html”,Toast.LENGTH\u SHORT.show();
收到来自\u LPD=“否”//下次重置的\u结果
startActivityForResult(i,99);
//等待();
}
else Toast.makeText(getApplicationContext(),“等待循环数-->”+x,Toast.LENGTH_SHORT).show();
收到来自\u LPD=“否”的\u结果\u;
睡眠(1000);
}
}
@凌驾
受保护的同步void onActivityResult(int请求代码、int结果代码、意图数据){
//TODO自动生成的方法存根
super.onActivityResult(请求代码、结果代码、数据);
如果(数据!=null&&requestCode==99&&resultCode==RESULT\u确定){
//成功的
Toast.makeText(getApplicationContext(),“successfull”,Toast.LENGTH_SHORT.show();
收到来自_LPD=“是”的_结果;
//通知();
}
否则{
//不成功
Toast.makeText(getApplicationContext(),“oopps!!!!”,Toast.LENGTH\u SHORT.show();
收到来自_LPD=“是”的_结果;
//通知();
}
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.main,menu);
返回true;
}
}

算是修好了…是预兆?!?这不完全是我所希望的,只是暂时打印出来,直到我更好地理解Java

您的代码并不“糟糕”,只是您不能像这样循环,因为启动活动没有阻塞。如果我在onActivityResult中还有数据要处理,我会删除for并进行测试。

好的,你可以保留挂起的文件列表,然后从onActivityResult发出下一个文件。本质上,你必须将循环由内而外,而不是循环“驱动”程序流,您需要通过决定每次程序流通过事件方法进入代码时要做什么来进行循环。