2012-02-07 2 views
3

Я хочу использовать простой snmp для входа в android.I нашел код для java и попытаюсь использовать его в android.I также прикрепить файл snmp4j.jar для android. Но я получил исключение NullPointer, т получить output.If кто-нибудь есть какие-либо идеи или код для того, как использовать SNMP в андроиде, пожалуйста, предложить мне ..Snmp для Android

Ниже мой код, который я попробовал,

1 import java.io.IOException; 
2 import org.snmp4j.CommunityTarget; 
3 import org.snmp4j.PDU; 
4 import org.snmp4j.Snmp; 
5 import org.snmp4j.TransportMapping; 
6 import org.snmp4j.event.ResponseEvent; 
7 import org.snmp4j.mp.SnmpConstants; 
8 import org.snmp4j.smi.OID; 
9 import org.snmp4j.smi.OctetString; 
10 import org.snmp4j.smi.UdpAddress; 
11 import org.snmp4j.smi.VariableBinding; 
12 import org.snmp4j.transport.DefaultUdpTransportMapping; 
13 import android.app.Activity; 
14 import android.os.Bundle; 
15 import android.util.Log; 
16 import android.view.View; 
17 import android.view.View.OnClickListener; 
18 import android.widget.Button; 
19 import android.widget.Toast; 
20 
21 public class SNMPClient extends Activity { 
22 
23 private static String ipAddress = "127.0.0.1"; 
24 private static String port = "161"; 
25 //cmd to request from Server 
26 private static String oidValue = "1.3.6.1.2.1.1.5.0"; 
27 private static int snmpVersion = SnmpConstants.version2c; 
28 private static String community = "public"; 
29 
30 public static Snmp snmp; 
31 public static CommunityTarget comtarget; 
32 static PDU pdu; 
33 static OID oid; 
34 static VariableBinding req; 
35 Button b; 
36 private static final String tag = "SNMP CLIENT"; 
37 
38 @Override 
39 public void onCreate(Bundle savedInstanceState) { 
40 super.onCreate(savedInstanceState); 
41 setContentView(R.layout.main); 
42  
43 System.setProperty("java.net.preferIPv4Stack", "true"); 
44  System.setProperty("java.net.preferIPv6Addresses", "false"); 
45  
46 b = (Button) findViewById(R.id.getvalue); 
47 b.setOnClickListener(new OnClickListener() { 
48 
49  public void onClick(View v) { 
50   // TODO Auto-generated method stub 
51   try { 
52    sendSnmpRequest(oidValue); 
53   } catch (IOException e) { 
54    // TODO Auto-generated catch block 
55    e.printStackTrace(); 
56   } catch (Exception e) { 
57    // TODO Auto-generated catch block 
58    e.printStackTrace(); 
59   } 
60 
61  } 
62 }); 
63 } 
64 
65 private void sendSnmpRequest(String cmd) throws Exception { 
66 // Create TransportMapping and Listen 
67 TransportMapping transport = new DefaultUdpTransportMapping(); 
68 transport.listen(); 
69 
70 // Create Target Address object 
71 CommunityTarget comtarget = new CommunityTarget(); 
72 comtarget.setCommunity(new OctetString(community)); 
73 comtarget.setVersion(snmpVersion); 
74 comtarget.setAddress(new UdpAddress(ipAddress + "/" + port)); 
75 comtarget.setRetries(2); 
76 comtarget.setTimeout(1000); 
77 // Prepare PDU 
78 req = new VariableBinding(); 
79 OID oid = new OID(cmd); 
80 req.setOid(oid); 
81 pdu = new PDU(); 
82 pdu.add(req); 
83 Snmp snmp = new Snmp(transport); 
84 Log.i(tag ,"Sending Request to Agent..."); 
85 ResponseEvent response = snmp.get(pdu, comtarget); 
86 // Process Agent Response 
87 if (response != null) { 
88  Log.i(tag,"Got Response from Agent"); //upto this get in Logcat 
89  PDU responsePDU = response.getResponse(); //Here get Null response 
90  if (responsePDU != null) { 
91   int errorStatus = responsePDU.getErrorStatus(); 
92   int errorIndex = responsePDU.getErrorIndex(); 
93   String errorStatusText = responsePDU.getErrorStatusText(); 
94 
95   if (errorStatus == PDU.noError) { 
96    Log.i(tag,"Snmp Get Response = " 
97      + responsePDU.getVariableBindings()); 
98    Toast.makeText(getApplicationContext(), 
99      "Snmp Get Response = " + responsePDU.getVariableBindings(),Toast.LENGTH_LONG).show(); 
100   } else { 
101     Log.i((String) tag,"Error: Request Failed"); 
102     Log.i(tag,"Error Status = " + errorStatus); 
103     Log.i(tag,"Error Index = " + errorIndex); 
104     Log.i(tag,"Error Status Text = " + errorStatusText); 
105    } 
106   } else { 
107    Log.i(tag,"Error: Response PDU is null"); // This get in Logcat 
108   } 
109  } else { 
110   Log.i(tag,"Error: Agent Timeout... "); 
111  } 
112  snmp.close(); 
113 }} 

Пожалуйста, кто имеет какое-либо решение Пожалуйста, предложите мне. Спасибо заранее .............

В строке 89 получить нулевое значение поэтому получить NullPointer Exception ....... Любой идею или код

+0

Просьба указать трассировку стека исключения. Он показывает номер строки, в которой произошел нулевой указатель. –

ответ

2

Из документации ResponseEvent.getResponse() (акцент мой):

Возвраты: экземпляр PDU, если ответ получен. Если запрошен запрос , то возвращается null.

Теперь, очевидно, вы можете видеть, что вы получаете null ответ на линии:

PDU responsePDU = response.getResponse(); 

Это скорее всего, потому что вы пытаетесь выполнить команду SNMP получить Localhost вашего Андроида адрес, то есть:

private static String ipAddress = "127.0.0.1"; 
private static String port = "161"; 
// ... 
comtarget.setAddress(new UdpAddress(ipAddress + "/" + port)); 

Это не имеет смысла, потому что ваш Android, вероятно, не имеет службы SNMP, выполняющей loc как вы получите ответ от службы SNMP, которая не работает?

Попробуйте изменить это ipAddress на адрес устройства, к которому вы хотите подключиться.

+0

Спасибо большое. Я делал очень глупую ошибку. – krushnakant

+0

Есть ли у вас какие-либо идеи, как использовать snmp walk или snmp getNext в android ??? Любой код или предложение ...... Пожалуйста ... – krushnakant

Смежные вопросы