Java Question Cannot Find Symbol Error Pro

keirS

Well-Known Member
Licensed User
Longtime User
Code:
Compiling code.                         0.08
Compiling layouts code.                 0.01
Generating R file.                      0.43
Compiling generated Java code.          Error
javac 1.6.0_26
src\b4a\example\main.java:225: cannot find symbol
symbol  : class requestHTTP
location: class b4a.example.main
public static requestHTTP _ohttp = null;
              ^
1 error

Can't figure out why I am getting this. Have searched the forum and tried rebuilding the Eclipse config from scratch as suggested but no joy. Occur when I do Dim oHttp As requestHTTP in B4A. My library code.

Code:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.io.InputStreamReader;
import anywheresoftware.b4a.BA.Author;
import anywheresoftware.b4a.BA.IterableList;
import anywheresoftware.b4a.BA.Permissions;
import anywheresoftware.b4a.BA.ShortName;
import anywheresoftware.b4a.BA.Version;
import anywheresoftware.b4a.objects.collections.Map;


@ShortName("requestHTTP") 
@Permissions(values = {"android.permission.INTERNET"}) 
@Author("KeirS") 
@Version(1) 
public class requestHTTP {

   
   /**
   * Simple one line Http Request
   *For GET requests pass null to the postData parameter
   *If you do not have headers pass null to the header parameter
   */

   public static String HttpsRequestUrl(String Url,String requestType, Map Header,String postData, String contentType ) throws IOException {
      HttpURLConnection reqConnection = null;
         OutputStreamWriter writeRequest = null;
         BufferedReader readResponse = null;
         StringBuilder sb = null;
         String line = null;
         URL serverAddress = null;
        
         try {
         serverAddress = new URL(Url);
      } catch (MalformedURLException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
          
          
        
          
          try {
         reqConnection = (HttpURLConnection)serverAddress.openConnection();
      } catch (IOException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
       
          
        reqConnection.setAllowUserInteraction(false);         
        reqConnection.setDoOutput(true);
        reqConnection.setRequestProperty("Content-Type",contentType);
        
        
        try {
         reqConnection.setRequestMethod(requestType);
      } catch (ProtocolException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
      
       
        if (Header != null) {
        IterableList addHeaders = Header.Keys();
        
       
       for (int nCounter = 0 ; nCounter < addHeaders.getSize(); nCounter++) {
          
          
         reqConnection.addRequestProperty(Header.GetKeyAt(nCounter).toString(),Header.GetValueAt(nCounter).toString());
           
       }
                  
       
        }
        
        reqConnection.connect();
      if (postData != null) {
        writeRequest  = new OutputStreamWriter(reqConnection.getOutputStream());
        writeRequest.write(postData);
        writeRequest.flush();
      }
      
      readResponse = new BufferedReader(new InputStreamReader(reqConnection.getInputStream()));
       sb = new StringBuilder();
     
       while ((line = readResponse.readLine()) != null)
       {
           sb.append(line + '\n');
       }
       reqConnection.disconnect();
       
       return sb.toString();
      
}
}


XML file

Code:
<?xml version="1.0" encoding="UTF-8" ?> 
- <root>
  <doclet-version-NOT-library-version>1.02</doclet-version-NOT-library-version> 
- <class>
  <name>requestHTTP</name> 
  <shortname>requestHTTP</shortname> 
  <owner>process</owner> 
  <permission>android.permission.INTERNET</permission> 
- <method>
  <name>HttpsRequestUrl</name> 
  <comment>Simple one line Http Request For GET requests pass null to the postData parameter If you do not have headers pass null to the header parameter</comment> 
  <returntype>java.lang.String</returntype> 
- <parameter>
  <name>Url</name> 
  <type>java.lang.String</type> 
  </parameter>
- <parameter>
  <name>requestType</name> 
  <type>java.lang.String</type> 
  </parameter>
- <parameter>
  <name>Header</name> 
  <type>anywheresoftware.b4a.objects.collections.Map</type> 
  </parameter>
- <parameter>
  <name>postData</name> 
  <type>java.lang.String</type> 
  </parameter>
- <parameter>
  <name>contentType</name> 
  <type>java.lang.String</type> 
  </parameter>
  </method>
  </class>
  <version>1.0</version> 
  <author>KeirS</author> 
  </root>

Any help appreciated.
 
OK got this working. In Eclipse classes must be in a named package. Using the default package generates the above error. Why?
 
I think the answer is here in the error text.
symbol : class requestHTTP
location: class b4a.example.main
As the class has no package name it looks like the compiler expects it to belong to the package being compiled and so is looking for

Code:
b4a.example.main.requestHTTP
 
Looks like that could be it. Got it all working in Java only to discover that you cant do network IO in the main process thread in Android :signOops: Now reading up on AsyncTask so I can wrap what I have in another class.
 
Back
Top